home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_10_01 / 1001116b < prev    next >
Text File  |  1991-11-17  |  7KB  |  268 lines

  1.  
  2. /************************************************************
  3.  *  Program: CMENU Menu Compiler
  4.  *  Module: ccmenu.h -- Compiler Module header file
  5.  *  Written by: Leor Zolman, 11/90
  6.  ************************************************************/
  7.  
  8. /********************* Misc. constants **********************/
  9.  
  10. #define TRUE    1
  11. #define FALSE   0
  12. #define OK      0
  13.  
  14. #define UNDEF_FWD (-1)             /* undefined forward reference flag */
  15.  
  16.  
  17. /********************** extern control **********************/
  18.  
  19. #ifndef MASTER
  20. #   define Extern extern                   /* external declarations    */
  21. #else
  22. #   define Extern                          /* one-time definitions     */
  23. #endif
  24.  
  25.  
  26. /********************* Type Definitions *********************/
  27.  
  28. typedef struct {
  29.     char Name[MAX_NAME];
  30.     ITEM Item;
  31. } IINFO;
  32.  
  33. typedef struct {
  34.     char Name[MAX_NAME];
  35.     BOOL Processed;
  36.     MENU Menu;
  37.     IINFO *Items[MAX_ITEMS];
  38. } MINFO;
  39.  
  40. /*********************** Token codes: ************************/
  41.  
  42. #if __STDC__
  43.  
  44. enum {
  45.     T_NULL,                                            /* special code */
  46.     T_MENU, T_TITLE, T_PATH,
  47.     T_SPACING, T_COLUMNS, T_ENDMENU,
  48.     T_ITEM, T_TEXT,
  49.     T_ALIGN, T_LEFT, T_CENTER, T_RIGHT,
  50.     T_NEXTITEM, T_FIRST, T_LAST, T_NEXT,
  51.     T_EMENU, T_LMENU, T_ACTION,
  52.     T_HELP,
  53.     T_PROMPT, T_PAUSE,                                     /* synonyms */
  54.     T_NOPROMPT, T_NOPAUSE,                                 /* synonyms */
  55.     T_PRECLEAR, T_NOPRECLEAR, T_POSTCLEAR, T_NOPOSTCLEAR,
  56.     T_EXIT,
  57.     T_ESCAPE, T_NOESCAPE,
  58.     T_STRING, T_VALUE, T_COLON, T_EOF                /* special tokens */
  59. };
  60.  
  61. #else   /* __STDC__ */
  62.  
  63. #define T_NULL      0                                  /* special code */
  64. #define T_MENU      1
  65. #define T_TITLE     2
  66. #define T_PATH      3
  67. #define T_SPACING   4
  68. #define T_COLUMNS   5
  69. #define T_ENDMENU   6
  70. #define T_ITEM      7
  71. #define T_TEXT      8
  72. #define T_ALIGN     9
  73. #define T_LEFT      10
  74. #define T_CENTER    11
  75. #define T_RIGHT     12
  76. #define T_NEXTITEM  13
  77. #define T_FIRST     14
  78. #define T_LAST      15
  79. #define T_NEXT      16
  80. #define T_EMENU     17
  81. #define T_LMENU     18
  82. #define T_ACTION    19
  83. #define T_HELP      20
  84. #define T_PROMPT    21                                     /* synonyms */
  85. #define T_PAUSE     22
  86. #define T_NOPROMPT  23                                     /* synonyms */
  87. #define T_NOPAUSE   24
  88. #define T_PRECLEAR  25
  89. #define T_NOPRECLEAR    26
  90. #define T_POSTCLEAR     27
  91. #define T_NOPOSTCLEAR   28
  92. #define T_EXIT      29
  93. #define T_ESCAPE    30
  94. #define T_NOESCAPE  31
  95. #define T_STRING    32                               /* special tokens */
  96. #define T_VALUE     33
  97. #define T_COLON     34
  98. #define T_EOF       35
  99.  
  100. #endif       /* __STDC__ */
  101.  
  102. /********************* Prototypes: **************************/
  103.  
  104. #if __STDC__ || XENIX                              /* ANSI Prototypes: */
  105.  
  106. int write_file(void);
  107. int dofile(char *);
  108.  
  109. void itemcheck(void);
  110. int gettok();
  111.  
  112. int error(char *, ...);
  113. int fatalerr(char *, ...);
  114.  
  115. MINFO create_menu(char *);
  116. IINFO *create_item(char *);
  117. MINFO *find_menu(char *);
  118. IINFO *find_item(char *);
  119.  
  120. int do_menu(void);
  121. int do_title(void);
  122. int do_path(void);
  123. int do_spacing(void);
  124. int do_columns(void);
  125. int do_item(void);
  126. int do_endmenu(void);
  127. int do_align(void);
  128. int do_text(void);
  129. int do_text2(void);
  130. int do_nextitem(void);
  131. int do_action(void);
  132. int do_help(void);
  133. int do_prompt(void);
  134. int do_clear(void);
  135. int do_err(void);
  136. int do_escape();
  137. int do_opts(void);
  138.  
  139. #else                                               /* K&R Prototypes: */
  140.  
  141. int write_file();
  142. int dofile();
  143.  
  144. Void itemcheck();
  145. int gettok();
  146.  
  147. int error();
  148. int fatalerr();
  149.  
  150. MINFO create_menu();
  151. IINFO *create_item();
  152. MINFO *find_menu();
  153. IINFO *find_item();
  154.  
  155. int do_menu();
  156. int do_title();
  157. int do_path();
  158. int do_spacing();
  159. int do_columns();
  160. int do_item();
  161. int do_endmenu();
  162. int do_align();
  163. int do_text();
  164. int do_text2();
  165. int do_nextitem();
  166. int do_action();
  167. int do_help();
  168. int do_prompt();
  169. int do_clear();
  170. int do_err();
  171. int do_escape();
  172. int do_opts();
  173.  
  174. #endif
  175.  
  176. #ifdef NEEDSTR
  177. char *strstr();
  178. #endif
  179.  
  180.  
  181. /************ Keyword / function dispatch table *************/
  182.  
  183. struct keywd {
  184.     char *keyword;
  185.     int (*t_func)();
  186. };
  187.  
  188. extern struct keywd keywords[];
  189.  
  190. #ifdef MASTER
  191. struct keywd keywords[] = {
  192.     "(null)", do_err,                                  /* for db only  */
  193.     "menu", do_menu,
  194.     "title", do_title,
  195.     "path", do_path,
  196.     "spacing", do_spacing,
  197.     "columns", do_columns,
  198.     "endmenu", do_endmenu,
  199.     "item", do_item,
  200.     "text", do_text,
  201.     "align", do_align,
  202.         "left", do_err,
  203.         "center", do_err,
  204.         "right", do_err,
  205.     "nextitem", do_nextitem,
  206.         "first",  do_err,
  207.         "last", do_err,
  208.         "next", do_err,
  209.     "emenu", do_action,
  210.     "lmenu", do_action,
  211.     "action", do_action,
  212.     "help", do_help,
  213.     "prompt", do_opts,
  214.     "pause", do_opts,
  215.     "noprompt", do_opts,
  216.     "nopause", do_opts,
  217.     "preclear", do_opts,
  218.     "nopreclear", do_opts,
  219.     "postclear", do_opts,
  220.     "nopostclear", do_opts,
  221.     "exit", do_action,
  222.     "escape", do_escape,
  223.     "noescape", do_escape,
  224.     "(!string)", do_err,                               /* for db only  */
  225.     "(!value)", do_err,                                /* for db only  */
  226.     "(!colon)", do_err,                                /* for db only  */
  227.     "(!EOF)", do_err                                   /* for db only  */
  228. };
  229. #endif
  230.  
  231. #define N_KEYWORDS  (sizeof keywords / sizeof (struct keywd))
  232.  
  233.  
  234. /*************** Other Data structures *********************/
  235.  
  236. Extern  MINFO MInfo[MAX_MENUS], *MIp;
  237. Extern  IINFO *IIp;
  238.  
  239. Extern  MENU *Mp, *CMp;            /* General, Current Menu Pointers   */
  240. Extern  ITEM *Ip, *CIp;            /* General, Current Item Pointers   */
  241.  
  242. Extern  struct {                   /* Item Forward Reference Table     */
  243.     char iname[MAX_NAME];          /* Item name                        */
  244.     int *refp;                     /* Pointer to reference location    */
  245.     int lineno;                    /* source line number of reference  */
  246. } fwd_refs[MAX_ITEMS];
  247.  
  248. Extern  int n_refs;                    /* Number of forward references */
  249.  
  250. /************** Miscellaneous data items ********************/
  251.  
  252. Extern  FILE    *fp;
  253. Extern  int     token, token2;                 /* token codes          */
  254. Extern  char    tparam[MAX_CMD];               /* text parameter       */
  255. Extern  int     vparam;                        /* value parameter      */
  256. Extern  int     lineno;                        /* current line number  */
  257. Extern  int     n_menus,
  258.                 n_items;
  259. Extern  BOOL    in_menu,
  260.                 in_item;
  261. Extern  BOOL    err_flag,
  262.                 fatal;
  263. Extern  int     item_num,
  264.                 menu_num;
  265.     
  266. Extern  char    src_name[MAX_PATH];
  267. Extern  char    obj_name[MAX_PATH];
  268.